찾다
백엔드 개발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으로 문의하세요.
如何在 Ubuntu 和其他 Linux 下安装 IDLE Python IDE如何在 Ubuntu 和其他 Linux 下安装 IDLE Python IDEApr 08, 2023 pm 10:21 PM

IDLE(集成开发学习环境Integrated Development and Learning Environment)是一个 ​​Python IDE​​​,由 Python 语言本身编写,在 Windows 中通常作为 ​​Python 安装​​ 的一部分而安装。它是初学者的理想选择,使用起来很简单。对于那些正在学习 Python 的人,比如学生,它可以作为一个很好的 IDE 来开始使用。语法高亮、智能识别和自动补全等基本功能是这个 IDE 的一些特点。你可以随时在官方 ​​文档​​ 中了

聊聊Ubuntu中怎么切换多个 PHP 版本聊聊Ubuntu中怎么切换多个 PHP 版本Aug 30, 2022 pm 07:37 PM

如何在 Ubuntu 中切换多个 PHP 版本?下面本篇文章给大家介绍一下Ubuntu中切换多个 PHP 版本的方,希望对大家有所帮助!

ubuntu怎么重启nginx服务ubuntu怎么重启nginx服务May 23, 2023 pm 12:22 PM

1.使用快捷键【Ctrl+Alt+T】打开终端命令模式。2.可以通过以下方式重启nginx服务。方法一,在nginx可执行目录sbin下,输入以下命令重启/nginx-sreload#重启方法二,查找当前nginx进程号,然后输入命令:kill-HUP进程号,实现重启nginx服务#ps-ef|grepnginx#查找当前nginx进程号]#kill-TERM132#杀死nginx进程,132为nginx进程号

docker内ubuntu乱码怎么办docker内ubuntu乱码怎么办Nov 04, 2022 pm 12:04 PM

docker内ubuntu乱码的解决办法:1、通过“locale”查看本地使用的语言环境;2、通过“locale -a”命令查看本地支持的语言环境;3、在“/etc/profile”文件的结尾处添加“export LANG=C.UTF-8”;4、重新加载“source /etc/profile”即可。

ubuntu php无法启动服务怎么办ubuntu php无法启动服务怎么办Dec 19, 2022 am 09:46 AM

ubuntu php无法启动服务的解决办法:1、在php-fpm.conf里面设置错误日志;2、执行“/usr/sbin/php-fpm7.4 --fpm-config /etc/php/fpm/php-fpm.conf”命令;3、修改php的配置文件注释即可。

ubuntu没有php-fpm怎么办ubuntu没有php-fpm怎么办Feb 03, 2023 am 10:51 AM

ubuntu没有php-fpm的解决办法:1、通过执行“sudo apt-get”命令添加php的源地址;2、查看有没有php7的包;3、通过“sudo apt-get install”命令安装PHP;4、修改配置监听9000端口来处理nginx的请求;5、通过“sudo service php7.2-fpm start”启动“php7.2-fpm”即可。

Ubuntu如何删除无用的Linux内核Ubuntu如何删除无用的Linux内核May 14, 2023 pm 09:13 PM

查找无用的镜像首先,您可以检查当前使用的内核,您可以通过命令获得信息:uname-aa.例如,它在我的桌面上显示为:复制代码代码如下:magc@magc-desktop:~$uname-aLinuxmagc-desktop2.6.24-19-RT#1SMPpremptRTThu8月21日02:08336003UTC2008i686GNU/Linux然后通过查看这台机器上所有内核的列表来决定哪些需要删除:运行命令:复制代码代码如下:dpkg-get-selections|greplinux例如,我

Ubuntu下Nginx如何安装与配置Ubuntu下Nginx如何安装与配置May 17, 2023 am 11:01 AM

1.nginx介绍nginx是一个非常轻量级的http服务器,nginx,它的发音为“enginex”,是一个高性能的http和反向代理服务器,同时也是一个imap/pop3/smtp代理服务器。2.对php支持目前各种web服务器对php的支持一共有三种:(1)通过web服务器内置的模块来实现,例如apache的mod_php5,类似的apache内置的mod_perl可以对perl支持。(2)通过cgi来实现,这个就好比之前perl的cgi,该种方式的缺点是性能差,因为每次服务器遇到这些脚本

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.