服务器小白来求教了…
因为一直使用的是虚拟主机,或者类似 SAE 那样的 PaaS 平台,没有接触过自己搭建服务器的流程,对这方面完全不懂…
现在由于阿里云、腾讯云之类的 VPS 服务价格慢慢下调,门槛也越来越低,以及受限于虚拟主机和 PaaS 平台的一些限制(例如 SSL),想自己学习一下一台生产环境的服务器的部署流程,希望各位服务器前辈、运维前辈,可以指点指点。
假定服务器为 Ubuntu 14.04 系统,并且希望:
系统不一定是要 Ubuntu,也可以是 CentOS 或 Debian,希望能入门容易一些就行。
能够跑 PHP 网站,最好是 PHP 7,部署完之后有哪些是必须优化的?
同时运行 MariaDB 或 MySQL 数据库,权限啊、远程访问啊,这一类是不是有特殊配置?
使用 Nginx 做 web 服务器,以及如何部署 HTTPS 网站?
使用 Git 进行代码发布,是不是要涉及 hook 之类的?
服务器的用户权限应该如何进行必要配置?基本的安全防护应该做哪些事?
既然是生产环境,那是否应该定时备份网站数据?有什么比较方便的方式?
全部手动安装,不要使用那些一键包。
我知道细节的优化是需要长年累月的经验,并不是几句话能够说清楚的,但我不求能完善到什么程度,主要以学习为目的,希望各位大神、前辈,能不吝赐教,谢谢大家!
root@zhangtong:~# sudo apt-get install apache2 php5 php5-gd php5-mysqlnd mysql-server
sudo: unable to resolve host zhangtong
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package php5 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
Package php5-gd is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'php5' has no installation candidate
E: Package 'php5-gd' has no installation candidate
E: Unable to locate package php5-mysqlnd
你们阿里自己的程序安装这些包有问题啊,资源貌似是失效了
Ubuntu通过apt安装LAMP环境
#安装下面这几个包后就可以跑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根用户密码
防火墙只开放ssh(22端口),http(80端口):
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 < /etc/iptables.up.rules
查看设置的规则:
sudo iptables -nvL --line-numbers
插入一条规则到INPUT链第6的位置:
sudo iptables -I INPUT 6 -j DROP
修改INPUT链的第6条规则:
sudo iptables -R INPUT 6 -j ACCEPT
删除INPUT链第6条规则:
sudo iptables -D INPUT 6
ssh使用密钥验证登录:
#生成密钥对(私钥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
如果你要使用最新的PHP7,最好还是学习一下自行编译,比如:
Ubuntu上Nginx/Apache/PHP编译打包教程
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。