用LAMP栈从零搭建部署基础个人网站
时间:2023-05-31 22:15:01 | 来源:网站运营
时间:2023-05-31 22:15:01 来源:网站运营
用LAMP栈从零搭建部署基础个人网站:
前言
我开始的目的是为了找软件工程工作,决定尝试通过把个人学校项目搭建在云服务器端,将其展示给招聘者。现在完成后决定下一步扩建其成个人博客。这篇文章介绍了从最开始的购买域名、购买云服务器,到中间的部署LAMP栈到服务器,到最后的协议加密安全、CA注册。文章的目的是为了帮助记下整个从0到1搭建部署一个基础个人网站的一种低费用方案的技术过程,使不只是我自己受益。
内容表单
- 所需主要资源
- 费用
- 搭建部署过程
- 注册AWS,设置Amazon EC2服务
- 发行一个instance
- 部署LAMP
- (可选)使用WinSCP通过GUI进行本地和远程instance的文件传输
- (推荐)给操作系统配置SSL/TLS,实现加密数据传输,和获得安全证书
- 展示
所需主要资源
- 域名: 有名的域名注册商有阿里云,AWS,godaddy。我在namecheap (namecheap.com) 购买了一个.io域名。这是一个国家地区顶级域名 (zh.wikipedia.org/wiki/.io),我不确定在国内相关系统里有无备案。
- 云服务器:有名的有阿里云和AWS。我使用了亚马逊的网络服务 - Amazon EC2 (https://aws.amazon.com/ec2/), 其可以理解为配置操作系统及应用(比如LAMP)的界面或平台。并在上面配置了一个Amazon Linux 2 作为AMI (https://aws.amazon.com/amazon-linux-2/),其可以理解为Linux的一个发行的操作系统,这是AWS维护和更新最多的版本。
- LAMP栈相关应用:必要的是AMP架构:Apache web server,MariaDB (MySQL server),PHP程序语言工具。可选的主要有:帮助管理MySQL数据库系统的GUI - PhpMyAdmin,帮助本地和远程(云服务器)文件传输的GUI管理工具:WinSCP,连接本地到远程的SSH Client:Putty等等... 下面搭建过程都会介绍。
- 网络安全配置(推荐): TLS网络数据传输加密,CA (Certificate Authority)证书。
费用
- 域名:$28/年。
- 云服务器:暂时免费。取决于选择的具体服务器:主要是容量和服务,
- LAMP栈:开源应用。
- CA证书:免费。通常需要费用。我使用了Let's Encrypt (letsencrypt.org) 项目作为CA,免费,并支持自动延期。
搭建部署过程
因为很多过程在Amazon AWS文档有工整的记录,大部分过程我在引用其文档的基础上添加注意事项、过程描述。
1. 注册AWS,设置Amazon EC2服务
- 建立的Key Pair是为了安全登陆你将在Amazon Linux 2上建立的instance。
- 建立的security group是类似防火墙的规则,用来控制inbound和outbound访问协议种类。
2. 发行一个instance
注意:
- 选择AMI的时候,选择Linux 2,因为这是AWS维护和更新最多的操作系统版本。
- 选择Instance Type的时候,在大多区域选择t2.micro会符合一个叫做free tier的资格,大概是免费试用期(https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc)。
- 你不需要进行上述文档的第三部:clean up instance,因为你要继续完成本文的后续步骤。
- 在上述文档里面第二步:连接到instance,注意自己的本地操作系统和连接instance的方式选择相应文档进行步骤,我选的是通过SSH Client将本地的Windows连接instance:
3. 部署LAMP
从链接文档的步骤里可以了解到,LAMP作为开源应用被使用者通过本地连接到Amazon Linux2的EC2 instance作为平台,部署在基于Amazon Linux 2操作系统的Amazon EC2 instance上,实现了免费的全栈部署。并且当instance运行的时候,Apache和MySQL可以配置成自动运行。
注意:
- 【连接Apache 和 MySQL】当Apache server 和 MySQL server需要连接的时候,你需要知道连接的socket port number 和 host。host是localhost,或 127.0.0.1,我原以为是instance的ip,但这两个server应该在instance上本地连接;port number 一般是3306,一般通过在command shell通过SSH连接到instance后,先准备进入MySQL client,
[ec2-user ~]$mysql -u root -p
root是一般在配置MySQL时默认的用户。输入配置好的密码后,进入MySQL client console, 查看port,
[ec2-user ~] mysql> SHOW VARIABLES WHERE Variable_name = 'port';+---------------+-------+| Variable_name | Value |+---------------+-------+| port | 3306 |+---------------+-------+1 row in set (0.00 sec)
你能看到MySQL server在哪个port listening。
- 【(可选)配置Python 3.x】Amazon Linux 2环境不自带python3.x的软件包,只有pyhton2.x,如果你的LAMP项目需要Python3.x使用MySQL,你可以按以下步骤手动安装。
首先下载Python 3.x。到2020年8月,最新的是3.6和3.7,你可以先检查可以安装的版本,以3.7为例,先安装Python 3.7
[ec2-user ~]$ sudo yum install python37
再安装python package安装渠道工具pip
[ec2-user ~]$ curl -O https://bootstrap.pypa.io/get-pip.py[ec2-user ~]$ python3 get-pip.py
为了保证pip是最近的版本 (pip可能需要替换成pip3):
[ec2-user ~]$ pip install pip --upgrade
为了把package方便管理,我在ec2-user(默认instance username)home directory下面建立一个virtual environment:(将my_app替换成你的项目名,env替换成你的虚拟环境名)
[ec2-user ~]$ python3 -m venv my_app/env
然后activate这个virtual environment:
[ec2-user ~]$ source ~/my_app/env/bin/activate(env) [ec2-user ~]$
在这个virtual env里面,下载python需要的MySQL相关包
[ec2-user ~]$ sudo yum install mysql-devel gcc gcc-devel python-devel[ec2-user ~]$ sudo yum install MySQL-python
查看所有开发包
[ec2-user ~]$ sudo yum search python3 | grep devel
看到
python3-cairo-devel.x86_64 : Libraries and headers for python3-cairopython3-devel.x86_64 : Libraries and header files needed for Python 3 : developmentpython34-devel.x86_64 : Libraries and header files needed for Python 3 : development
安装需要的
[ec2-user ~]$ sudo yum install -y python3-devel.x86_64
到此,你应该有一个虚拟环境配置能连接MySQL的python 3.7应用在instance上。
4. (可选)使用WinSCP通过GUI进行本地和远程instance的文件传输
注意:
- 在使用WinSCP进行同步本地和远程、更新远程文件操作时候,为了能够修改一些本来没有权限修改的instance上的配置文件,在准备用配置好的instance登陆的时候,选择SFTP protocal,option修改成
sudo /usr/libexec/openssh/sftp-server
参考 How to run SUDO command in WinSCP to transfer files from Windows to linux
5. (推荐)给操作系统配置SSL/TLS,实现加密数据传输,和获得安全证书。
5.1. 你会先需要一个域名。我在namecheap注册商购买了一个.io。
5.2. 完成下述文档的第一步、第二步。你不必要完成第三步:强化安全配置。
5.3. 使用Let's Encrypt和Certbot申请CA证书,并设置自动更新,参看:
5.4. 将你的域名“指向”或“连接”instance的公共ip地址。注:你的EC2 console里面设置elastic IP,目的是固定,无论如何重启instance。参考这篇文章。
到此,你便有了一个数据传输加密的、拥有安全证书的、LAMP部署成功、基于Amazon Linux 2操作系统的instance作为你的云服务器或云主机,整个过程完成不超过2天,并很可能只产生域名的购买费用。下一步你可以使用WinSCP将你的本地项目或博客部署到远程的apache根目录下,一般是/var/www/html,进行你的个人网站搭建;同时仔细阅读相关的free tier信息,注意后续AWS服务费用。
free tier offers from AWS:
https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc展示: hzhaoc.io