开发者社区> 问答> 正文

服务器小白求教一台 Ubuntu 网站服务器完整的部署流程是怎样的?

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

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

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

系统不一定是要 Ubuntu,也可以是 CentOS 或 Debian,希望能入门容易一些就行。
能够跑 PHP 网站,最好是 PHP 7,部署完之后有哪些是必须优化的?
同时运行 MariaDB 或 MySQL 数据库,权限啊、远程访问啊,这一类是不是有特殊配置?
使用 Nginx 做 web 服务器,以及如何部署 HTTPS 网站?
使用 Git 进行代码发布,是不是要涉及 hook 之类的?
服务器的用户权限应该如何进行必要配置?基本的安全防护应该做哪些事?
既然是生产环境,那是否应该定时备份网站数据?有什么比较方便的方式?
全部手动安装,不要使用那些一键包。
我知道细节的优化是需要长年累月的经验,并不是几句话能够说清楚的,但我不求能完善到什么程度,主要以学习为目的,希望各位大神、前辈,能不吝赐教,谢谢大家!

展开
收起
a123456678 2016-06-27 14:50:48 7118 0
2 条回答
写回答
取消 提交回答
  • 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

    你们阿里自己的程序安装这些包有问题啊,资源貌似是失效了

    2019-07-17 19:47:38
    赞同 展开评论 打赏
  • 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编译打包教程
    2019-07-17 19:47:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS计算与存储分离架构实践 立即下载