搜尋
首頁後端開發php教程服务器小白求教一台 Ubuntu 网站服务器完整的部署流程是怎样的?

服务器小白来求教了…
因为一直使用的是虚拟主机,或者类似 SAE 那样的 PaaS 平台,没有接触过自己搭建服务器的流程,对这方面完全不懂…

现在由于阿里云、腾讯云之类的 VPS 服务价格慢慢下调,门槛也越来越低,以及受限于虚拟主机和 PaaS 平台的一些限制(例如 SSL),想自己学习一下一台生产环境的服务器的部署流程,希望各位服务器前辈、运维前辈,可以指点指点。

假定服务器为 Ubuntu 14.04 系统,并且希望:

  1. 系统不一定是要 Ubuntu,也可以是 CentOS 或 Debian,希望能入门容易一些就行。

  2. 能够跑 PHP 网站,最好是 PHP 7,部署完之后有哪些是必须优化的?

  3. 同时运行 MariaDB 或 MySQL 数据库,权限啊、远程访问啊,这一类是不是有特殊配置?

  4. 使用 Nginx 做 web 服务器,以及如何部署 HTTPS 网站?

  5. 使用 Git 进行代码发布,是不是要涉及 hook 之类的?

  6. 服务器的用户权限应该如何进行必要配置?基本的安全防护应该做哪些事?

  7. 既然是生产环境,那是否应该定时备份网站数据?有什么比较方便的方式?

  8. 全部手动安装,不要使用那些一键包。

我知道细节的优化是需要长年累月的经验,并不是几句话能够说清楚的,但我不求能完善到什么程度,主要以学习为目的,希望各位大神、前辈,能不吝赐教,谢谢大家!

回复内容:

服务器小白来求教了…
因为一直使用的是虚拟主机,或者类似 SAE 那样的 PaaS 平台,没有接触过自己搭建服务器的流程,对这方面完全不懂…

现在由于阿里云、腾讯云之类的 VPS 服务价格慢慢下调,门槛也越来越低,以及受限于虚拟主机和 PaaS 平台的一些限制(例如 SSL),想自己学习一下一台生产环境的服务器的部署流程,希望各位服务器前辈、运维前辈,可以指点指点。

假定服务器为 Ubuntu 14.04 系统,并且希望:

  1. 系统不一定是要 Ubuntu,也可以是 CentOS 或 Debian,希望能入门容易一些就行。

  2. 能够跑 PHP 网站,最好是 PHP 7,部署完之后有哪些是必须优化的?

  3. 同时运行 MariaDB 或 MySQL 数据库,权限啊、远程访问啊,这一类是不是有特殊配置?

  4. 使用 Nginx 做 web 服务器,以及如何部署 HTTPS 网站?

  5. 使用 Git 进行代码发布,是不是要涉及 hook 之类的?

  6. 服务器的用户权限应该如何进行必要配置?基本的安全防护应该做哪些事?

  7. 既然是生产环境,那是否应该定时备份网站数据?有什么比较方便的方式?

  8. 全部手动安装,不要使用那些一键包。

我知道细节的优化是需要长年累月的经验,并不是几句话能够说清楚的,但我不求能完善到什么程度,主要以学习为目的,希望各位大神、前辈,能不吝赐教,谢谢大家!

配一台 Web 服务器这个问题太泛了,要知道每一门语言都可以提供 Web 服务,Web 容器的种类也十分繁多。
这里只讲一些最基本的事项吧。

Q:那么到底如何开始学习配置一台 Web 服务器?
A:你首先需要知道用户访问Web服务所经过的流程,逐个击破。

0x01 了解 Web 请求流程

1.用户打开浏览器后输入网址,并回车。
2.浏览器开始查询网址的DNS纪录,并对查询到的纪录发起请求。(购买域名/DNS记录都是什么/配置域名的DNS)
3.服务器的Web容器(如Nginx/Apache等)接收到请求,并根据浏览器发送过来的HTTP头开始工作。(HTTP头/常见Web容器/如何配置这些Web容器和后端程序协同工作)(注:Web容器不是必须存在的,但却是最常见的处理Web请求的流程的一部分)
4.后端处理收到的请求
5.Web容器从后端程序获得最终的结果,并将结果和HTTP回复头一起返回给浏览器
6.浏览器展示结果

基本流程说完了,看看有哪些自己概念模糊甚至完全不懂的地方,搜索一下,弄清楚之后继续向下看。

0x02 服务器部署

1.熟知常用指令,至少日常操作服务器不要把大量时间用在查基本指令怎么用上,打击自己的积极性。
2.创建一个自己的低权限账户,不要通过ssh直接登录root账户操作,对于防止自己误操作,提升安全性都有帮助。
3.学会使用包管理器,就是用来安装软件的那个指令。CentOS/RedHat是yum,Debian/Ubuntu是apt-get
4.开始安装你阅读了 0x01 之后你觉得需要安装的东西...
5.使用包管理器找不到的软件,或者版本不如意的软件,学会下载源代码,编译,安装到指定目录。

另外:搞清楚 $ ls -lhta 列出目录/文件后,前面的那些东西的意义。

<code>比如:drrwxrwxr-x  1 lakechan lakechan 322K Jan 28 09:10 233333
</code>

部署完之后,你现在应该能够跑起来服务了,并且能够访问你的页面了,但是在上线之前,看看下面的基本安全常识。

0x03 基本安全常识

  • 部署安全

系统:禁止ssh的root账户登录,创建一个自己的低权限账户平日管理服务器使用,使用sudo或者su到root账户来进行提升权限的操作;所有账户使用强密码,或者仅允许使用publickey通过ssh登录;系统内核常升级
Web容器:常升级
仅对于PHP:禁用eval的使用
Mysql:如无需要,关闭所有账户的远程登录;不要让程序使用root账户连接数据库,尽量细化账户权限分配;账户不要使用太弱的密码
代码部署:如果你选择使用git/svn等版本管理系统来部署和更新代码,禁止用户访问.git/.svn这些用户不该访问的目录;不要让Web容器跟随软链接;对各个文件和目录(包括Web程序的根目录)的 权限/所有者 的配置,遵循最小化原则;不要偷懒
其他:默认的东西统统不要留,比如apache的server-status,phpMyAdmin的目录名称起一个复杂一点的,至少不要用pma,pma123这种随手猜的名字。

  • 程序安全

警惕一切用户提供给你的数据,预防sql注入,文件上传,xss,csrf等攻击

安全方面配置到这里,基本能挡住大多数的ScriptKid了

0x04 最重要的

打了这么多字累死我了,好歹给个赞吧?

估计你说的是裸机,第一次配服务器肯定不太容易,我之前也找了好多文章教程什么的,前前后后能有30来篇博客,我的感受是大部分教程都是直接告诉你步骤,很少告诉你到底为什么,等你知道为什么了,基本你也就配完了。
你说的这几点我不全都知道,只对nginx和CentOS的配置有一点了解。
http://segmentfault.com/a/1190000004294634
这是我写的一个CentOS下用Nginx和uwsgi部署flask项目的文章,其中涉及你说的部分问题,可以看一下,希望有用。

Ubuntu通过apt安装LAMP环境

<code>#安装下面这几个包后就可以跑Discuz!这些常用PHP程序了
sudo apt-get install apache2 php5 php5-gd php5-mysqlnd mysql-server
sudo service apache2 {status|start|stop|restart|reload}
sudo service mysql {status|start|stop|restart|reload}

Apache网站根目录 /var/www
Apache主目录 /etc/apache2
Apache主配置文件 /etc/apache2/apache2.conf
Apache日志 /var/log/apache2

PHP主目录 /etc/php5
PHP配置文件 /etc/php5/apache2/php.ini
PHP模块位置 /usr/lib/php5

MySQL配置文件 /etc/mysql/my.cnf
MySQL数据库文件 /var/lib/mysql
运行 mysql_secure_installation 设置mysql根用户密码</code>

防火墙只开放ssh(22端口),http(80端口):

<code>Ubuntu使用ufw可以这样做:
sudo ufw enable && \
sudo ufw default deny && \
sudo ufw allow 22/tcp && \
sudo ufw allow 80/tcp && \
sudo ufw status
可以这样删除,比如80端口:
sudo ufw delete allow 80/tcp

Ubuntu使用iptables可以这样做:
sudo ufw disable && sudo ufw default allow 设置INPUT/FORWARD/OUTPUT为ACCEPT,如果为DENY,下一步骤将使系统的所有网络访问中断,包括ssh.
sudo iptables -F && sudo iptables -X && sudo iptables -Z && sudo iptables -L
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
sudo iptables -A INPUT -j DROP
iptables-save > /etc/iptables.up.rules 切换到root用户执行,sudo会提示无权限.Redhat的保存操作为service iptables save.
sudo nano /etc/network/interfaces 在末尾添加一行,在网络启动时应用防火墙规则: 
pre-up iptables-restore </code>

ssh使用密钥验证登录:

<code>#生成密钥对(私钥id_rsa和公钥id_rsa.pub)
ssh-keygen
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
#使用密钥登录后禁止密码认证
sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
#重启服务生效
sudo service ssh restart</code>

如果你要使用最新的PHP7,最好还是学习一下自行编译,比如:
Ubuntu上Nginx/Apache/PHP编译打包教程

其实这类资料各大云主机,vps 供应商都有提供,做得比较好的推荐一个:

https://www.digitalocean.com/community/

尽管态度很诚恳,但仍旧问了一大堆网上有现成答案的问题。

所以,我建议你去看一看linode和digital ocean的官方指导,然后按照他们的来操作一遍,就可以了。所用的主机不必要是阿里云,自己电脑上装一台虚拟机就可以。

是的,以上是我认为的针对你的最优解决方案,毕竟也能练练使用搜索引擎。

其实你可以先学习下docker,配置一个docker环境,并且可以在github找到你需要的一些配置的dockerfile,读里面的内容,就能很容易了解都需要配置啥了,这是一个学习的办法,dockerfile其实就相当于把配置过程的命令行集中在里面了

1,我用centos,只是因为从一开始就接触redhat系列的。
2,到php.net官方下载php7,使用tar解压,./configure --help,看看你要安装哪些扩展。部署完了后优化在php-fpm.conf里,包括了安全和性能。安全包括每个网站使用独立的pool,每个pool的运行账号不同,最好监听unix socket,这样方便权限控制,配置php_admin_flag,把显示错误关了,并记录错误日志。性能包括:配置pm.status_path,方便查看性能,调试并配置pm.相关的。memory_list,限制内存使用,open_basedir,这个和安全相关,这些指令的具体意义都可以在php.ini里注释看到的。官方php.net也有讲。对了还有slow log。方便后期调优。
3,同时运行mariadb,所以,监听localhost吧,创建数据库后,不要对用户grant all,用到什么权限grant什么权限。远程访问如果需要开,openssl rand -hex 16给用户生成32位随机密码吧。
4,nginx做web服务器,worker进程数量和cpu一样多就行了,但php-fpm的worker进程要比cpu多,具体多少,慢慢调试。部署ssl看nginx.org/doc的ssl module就行了。有例子。免费ssl证书有https://letsencrypt.org/。access log 和 error log配置一下,平时看log也能看出来攻击啥的。后期分析也有个依据。对了,还有一个,server里配置一下,如果域名不是server_name,就return 444。否则别人经常刷广告。
5,使用git自动 部署的话,gitlab可以配置一个 web hook,你监听master分支的push事件,然后git clone代码到具体目录 啥的。
6,我猜测你大多数是网站 ,所以,nginx 和php-fpm的权限做好就行了。ngixn是nobody,php-fpm默认是nobody,如果有多个网站,就使用不同的账号。给代码目录 php-fpm pool运行权限 ,然后other不要给。防止跨站,再配合open_basedir啥的,挺好了。nginx是nobody,所以,可以用linux acl来给nobody配置读静态文件权限就行了。对了,根据你的业务,如果有上传文件到服务器然后可以访问的,配置访问location,不作php解析,防止有上传漏洞。
7,网站备份 ,数据库备份 啥的,手动备就行了,备份完了上传到网盘。做个自动脚本 也行。tar归档打包。数据库用mysqldump,量大用别的工具,maridb backup那章讲的有。
8,我就是手动编译部署的。这样自己清楚 明白 。但也累。对了,还有php-fpm 和nginx的日志切割,使用logrotate,你man 一下logrotate就清楚配置肿么写了,指令不多也。

最后,一时半会能想到的就这些,若需要有偿帮忙,扣扣175753457。不会念我QQ昵称第一个字,请查阅再加。谢谢。

1可以使用腾讯云主机, 安装centos操作系统。 一般使用腾讯的yum源可以非常简单的安装nginx,mysql,gcc这些工具。
2不推荐使用新浪app,无法做到精准控制。无法通过终端连接主机。
3腾讯云主机可以自己安装svn服务器,mysql,mongodb任何你使用的技术都可以。和你自己搭建一个虚拟机是一样的自由度很高,并且你可以自己做安全加固和防火墙策略。
4你说的部署规则,最好是通过svn版本控制的源码在编译机上编译后在部署到线上,线上通过nginx切换流量达到不停服务部署更新的效果。如果遇到问题可以回滚到上一次稳定版本。这个需要你使用一些可持续化集成工具来辅助你。
5另外你不懂linux,不懂操作系统,是万万不行的。开发的服务如何做到没有单点故障,如何做负载均衡,都需要对网络,对系统有所了解,那什么所谓的集成环境千万不要碰,他只会让你更加痛苦。因为你不知道冰山下面到底是什么。

我自己用腾讯的云主机半年多,没有宕机,而且性能很出众,网络速度快。 从我司上传一个1G的电影分分钟搞定,每秒可达6m的速度。。。

建议你本地电脑安装一个虚拟机进行测试配置

这个问题就好比在问如何制作一个网站一样,太宽泛了。

你的每个问题都可以搜到的。动手做一遍遇到具体问题再来问吧。

楼上+1,题主问的问题里面有很多都是网上可以直接获得相应答案的东西,而且问题太空泛了,在这里一下整个丢出来问显得有点自学能力不足的样子

要搭建一个服务器其实需要搞清楚几点,基本的操作系统相关,网络相关,以及服务器相关要点

操作系统用什么发行版随便,反正要做的话肯定需要先自己用虚拟机多操作几次,具体怎么选看个人了,用户权限、防护手段、防火墙、端口之类,以及软件怎样安装什么的都是操作系统领域学习的点了,网上针对的资料博客论坛社区太多了

php不了解不予评论,但是基本上应该都差不太多,选用容器,配置...
楼主要用nginx做服务器,这个去nginx官网查阅文档,有非常详细的资料可以参考,网上帮助信息也非常多

最后,问题的所有内容,全部都可以通过google或者stackoverflow获取到帮助信息,这点很重要

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
優化PHP代碼:減少內存使用和執行時間優化PHP代碼:減少內存使用和執行時間May 10, 2025 am 12:04 AM

TooptimizePHPcodeforreducedmemoryusageandexecutiontime,followthesesteps:1)Usereferencesinsteadofcopyinglargedatastructurestoreducememoryconsumption.2)LeveragePHP'sbuilt-infunctionslikearray_mapforfasterexecution.3)Implementcachingmechanisms,suchasAPC

PHP電子郵件:分步發送指南PHP電子郵件:分步發送指南May 09, 2025 am 12:14 AM

phpisusedforsendendemailsduetoitsignegrationwithservermailservicesand andexternalsmtpproviders,自動化intifications andMarketingCampaigns.1)設置設置yourphpenvenvironnvironnvironmentwithaweberswithawebserverserververandphp,確保themailfunctionisenabled.2)useabasicscruct

如何通過PHP發送電子郵件:示例和代碼如何通過PHP發送電子郵件:示例和代碼May 09, 2025 am 12:13 AM

發送電子郵件的最佳方法是使用PHPMailer庫。 1)使用mail()函數簡單但不可靠,可能導致郵件進入垃圾郵件或無法送達。 2)PHPMailer提供更好的控制和可靠性,支持HTML郵件、附件和SMTP認證。 3)確保正確配置SMTP設置並使用加密(如STARTTLS或SSL/TLS)以增強安全性。 4)對於大量郵件,考慮使用郵件隊列系統來優化性能。

高級PHP電子郵件:自定義標題和功能高級PHP電子郵件:自定義標題和功能May 09, 2025 am 12:13 AM

CustomHeadersheadersandAdvancedFeaturesInphpeMailenHanceFunctionalityAndreliability.1)CustomHeadersheadersheadersaddmetadatatatatataatafortrackingandCategorization.2)htmlemailsallowformattingandttinganditive.3)attachmentscanmentscanmentscanbesmentscanbestmentscanbesentscanbesentingslibrarieslibrarieslibrariesliblarikelikephpmailer.4)smtppapapairatienticationaltication enterticationallimpr

使用PHP和SMTP發送電子郵件的指南使用PHP和SMTP發送電子郵件的指南May 09, 2025 am 12:06 AM

使用PHP和SMTP發送郵件可以通過PHPMailer庫實現。 1)安裝並配置PHPMailer,2)設置SMTP服務器細節,3)定義郵件內容,4)發送郵件並處理錯誤。使用此方法可以確保郵件的可靠性和安全性。

使用PHP發送電子郵件的最佳方法是什麼?使用PHP發送電子郵件的最佳方法是什麼?May 08, 2025 am 12:21 AM

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

PHP中依賴注入的最佳實踐PHP中依賴注入的最佳實踐May 08, 2025 am 12:21 AM

使用依賴注入(DI)的原因是它促進了代碼的松耦合、可測試性和可維護性。 1)使用構造函數注入依賴,2)避免使用服務定位器,3)利用依賴注入容器管理依賴,4)通過注入依賴提高測試性,5)避免過度注入依賴,6)考慮DI對性能的影響。

PHP性能調整技巧和技巧PHP性能調整技巧和技巧May 08, 2025 am 12:20 AM

phpperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovessetimes.2)優化

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。