一、购买ECS服务器
我的需求:建立一个个人小网站,访问人五人以下,可能就我自己访问。并且开发一个微信小程序。需要用mysql
最后购买的配置:
2核 1GB突发性能实例 t6系列 V
I/O 优化实例:I/O 优化实例
系统盘:高效云盘/dev/xvda40GB模块属性
带宽:1Mbps按固定带宽
CPU:2核
可用区:随机分配
操作系统:Alibaba Cloud Linux 3.2104 LTS 64位Linux64位
内存:1GB
地域:华南 1
网络类型:专有网络
体检服务:是
管家服务:是
已分配公网IP
价格54元/月
二、配置mysql
(一)安装Mysql
点击立即登录
进入linux界面
参考以下链接安装mysql
https://help.aliyun.com/zh/ecs/use-cases/manually-deploy-mysql-on-an-ecs-instance-that-runs-centos
【到配置安全组之前都是这篇文章的,原文比较清晰建议大家去看原文。然后再返回来看】
步骤一:安装mysql
1.运行以下命令,更新YUM源。
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
2.(可选)当操作系统为Alibaba Cloud Linux 3时,请执行如下命令,安装MySQL所需的库文件。
sudo rpm -Uvh https://mirrors.aliyun.com/alinux/3/updates/x86_64/Packages/compat-openssl10-1.0.2o-4.0.1.al8.x86_64.rpm
3.运行以下命令,安装MySQL。
sudo yum -y install mysql-community-server --enablerepo=mysql80-community --nogpgcheck
4.运行以下命令,查看MySQL版本号。
mysql -V
5.返回结果如下,表示MySQL安装成功。
mysql Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)
步骤二:配置MySQL
1.运行以下命令,启动并设置开机自启动MySQL服务。
sudo systemctl start mysqld
sudo systemctl enable mysqld
2.运行以下命令,获取并记录root用户的初始密码。
sudo grep 'temporary password' /var/log/mysqld.log
执行命令结果示例如下。
2022-02-14T09:27:18.470008Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: r_V&f2wyu_vI
说明
示例末尾的r_V&f2wyu_vI为初始密码,后续在对MySQL进行安全性配置时,需要使用该初始密码。
3.运行以下命令,对MySQL进行安全性配置。
sudo mysql_secure_installation
根据提示信息,重置MySQL数据库root用户的密码。
说明
在输入密码时,系统为了最大限度地保证数据安全,命令行将不做任何回显。您只需要输入正确的密码信息,然后按Enter键即可。
Enter password for user root: #输入已获取的root用户初始密码
The existing password for the user account root has expired. Please set a new password.
New password: #输入新的MySQL密码
Re-enter new password: #重复输入新的MySQL密码
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) :Y #输入Y选择更新MySQL密码。您也可以输入N不再更新MySQL密码。
New password: #输入新的MySQL密码
Re-enter new password: #重复输入新的MySQL密码
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :Y #输入Y确认使用已设置的密码。
根据提示信息,删除匿名用户。
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) :Y #输入Y删除MySQL默认的匿名用户。
Success.
禁止root账号远程登录。
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :Y #输入Y禁止root远程登录。
Success.
删除test库以及对test库的访问权限。
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :Y #输入Y删除test库以及对test库的访问权限。
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
重新加载授权表。
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :Y #输入Y重新加载授权表。
Success.
All done!
步骤三:远程访问MySQL数据库
建议您使用非root账号远程登录MySQL数据库。下文示例中,将创建新的MySQL账号,用于远程访问MySQL。
远程连接ECS实例。
关于连接方式的介绍,请参见连接方式概述。
运行以下命令后,输入root用户的密码登录MySQL。
sudo mysql -uroot -p
依次运行以下命令,创建远程登录MySQL的账号,并允许远程主机使用该账号访问MySQL。
本示例账号为dmsTest、密码为Ecs@123****。
重要
实际创建账号时,需将示例密码Ecs@123****更换为符合要求的密码,并妥善保存。密码要求:长度为8至30个字符,必须同时包含大小写英文字母、数字和特殊符号。可以使用以下特殊符号:
()` ~!@#$%^&*-+=|{}[]:;‘<>,.?/
#创建数据库用户dmsTest,并授予远程连接权限。
create user 'dmsTest'@'%' identified by 'Ecs@123****';
#为dmsTest用户授权数据库所有权限。
grant all privileges on *.* to 'dmsTest'@'%';
#刷新权限。
flush privileges;
执行以下命令,退出数据库。
exit
使用dmsTest账号远程登录MySQL。
在自己的电脑上用Navicat连接该服务器。
navicat连接信息:
这里的IP地址就是你购买ECS服务器配置的公网IP
(二)给实例配置安全组策略
主要是为了允许我们这个linux服务器上运行mysql服务的3306端口可以被访问。(就像你要让一只猫进家里,总得把门打开吧。)
在阿里云的左侧菜单栏点击 实例与镜像->实例
找到要配置端口的云服务器
点击三个点
点击加入安全组
选择一个安全组
然后在左侧的网络与安全->安全组中对刚刚选择的安全组进行配置
点击管理规则
入方向
点击手动添加
然后
到这里,用Navicat连接还是提示
远程连接Linux系统的ECS实例中的MySQL失败,提示“ERROR 2003 (HY000): Can't connect to MySQL server on '112.106.**.**'”错误怎么办?
此时,进入linux,把linux的my.cnf文件备份一下(一开始我看有的人是mysqld.cnf 我说怎么我的没有,后来才知道原来windows是这个,linux是my.cnf)
cp my.cnf my.cnf.bak
修改my.cnf配置文件
首先执行命令,打开my.cnf文件
vim /etc/my.cnf
然后按i进入编辑模式,把bind-address = 0.0.0.0加入到文件中
然后添加完成后按esc退出编辑模式,然后输入:wq后按enter键保存改动并退出文件
bind-address=0.0.0.0
然后重启mysql服务
sudo systemctl restart mysqld
(三)设置防火墙
1.启动并配置 FirewallD
首先,尝试启动 FirewallD 服务:
sudo systemctl start firewalld
然后,确认 FirewallD 已经启动:
sudo systemctl status firewalld
接下来,为了确保远程连接到MySQL服务器的能力,需要确保firewalld防火墙配置正确,允许外部访问服务器上的MySQL端口(默认是3306)。尝试添加3306端口到防火墙规则:
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
之后,重新加载 FirewallD 以应用更改:
sudo firewall-cmd --reload
检查更新后的规则,确认3306端口已被允许:
sudo firewall-cmd --list-all
这个命令将显示所有配置的规则,包括允许的端口。你应该能在列表中看到3306端口。
此时再连接就成功了!
三、根据阿里云给的搭建微信小程序的教程进行操作
(一)先找到教程并执行
1.进入阿里云控制台
2.点击侧边栏的ECS服务器
3.在概览页面找到教程
##(二)根据教程进行操作(遇到的一些问题)
这是官方的流程,第一个登录我就不说了,
1.登录云服务器(略)
2.安装Ngix服务
1.执行命令安装Nginx。
yum update && yum -y install nginx
2.启动Nginx
systemctl start nginx
3.测试Nginx。在浏览器地址栏输入http://<ECS公网IP地址>,ECS服务器的弹性公网IP可以从ECS实例页面获取,出现Welcome to CentOS表示Nginx已安装成功。
这里要注意,别输入成https://,要不然是成功不了的。我一开始输入的是https结果失败了我还在那里找半天原因
3.开发后端服务
1.创建服务目录
mkdir /data && cd /data
2.创建并编辑Python服务依赖文件。
vim requirements.txt
3.进入Vim编辑器后,按i键进入编辑模式,粘贴以下内容。
aliyun_python_sdk_core==2.13.36
aliyun_python_sdk_ecs==4.24.62
Flask==2.0.3
4.粘贴后,按Esc键,输入:x保存并退出编辑。
执行如下命令安装依赖。
pip3 install --upgrade pip && pip3 install -r requirements.txt
5.创建并编辑Python服务代码文件。
vim get_server_info.py
6.进入Vim编辑器后,按i键进入编辑模式,粘贴以下内容。
注意:metaUrl里面的这个IP地址100.100.100.200不用改哦!!这个IP地址是一个特殊的内部IP,仅在阿里云ECS实例内部可用,用于访问实例的元数据
# -*- coding: utf-8 -*-
from flask import Flask, jsonify, request
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth import credentials
import requests
import json
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest, DescribeInstanceStatusRequest
# 创建Flask应用
app = Flask(__name__)
# 元数据URL,用于获取安全凭证
metaUrl = 'http://你的公网IP地址/latest/meta-data/ram/security-credentials/刚刚创建的角色名(如pighero)'
# 实例地域
region = 'cn-beijing'
# 获取临时身份凭证函数
def getStsToken():
# 请求元数据服务获取临时凭证
tokenResponse = requests.get(metaUrl)
return tokenResponse.json()
# 定义获取服务器信息的路由
@app.route('/ecs/getServerInfo', methods=['GET'])
def getServerInfo():
# 获取STS临时凭证
tokenResult = getStsToken()
accessKeyId = tokenResult['AccessKeyId']
accessSecret = tokenResult['AccessKeySecret']
securityToken = tokenResult['SecurityToken']
# 使用临时凭证创建阿里云客户端
credential = credentials.StsTokenCredential(accessKeyId, accessSecret, securityToken)
client = AcsClient(credential=credential, region_id=region)
# 从GET请求中获取实例ID
instanceId = request.args.get("instanceId")
if instanceId is None:
return "Invalid Parameter"
# 查询实例信息请求
describeInstancesRequest = DescribeInstancesRequest.DescribeInstancesRequest()
describeInstancesRequest.set_InstanceIds([instanceId])
describeInstancesResponse = client.do_action_with_exception(describeInstancesRequest)
# 将响应的bytes类型转换为str,然后反序列化为json
describeInstancesResponse = json.loads(str(describeInstancesResponse, 'utf-8'))
# 检查响应中是否包含实例信息
if len(describeInstancesResponse['Instances']['Instance']) == 0:
return jsonify({})
# 获取实例信息
instanceInfo = describeInstancesResponse['Instances']['Instance'][0]
# 查询实例状态请求
describeInstanceStatusRequest = DescribeInstanceStatusRequest.DescribeInstanceStatusRequest()
describeInstanceStatusRequest.set_InstanceIds([instanceId])
describeInstanceStatusResponse = client.do_action_with_exception(describeInstanceStatusRequest)
describeInstanceStatusResponse = json.loads(str(describeInstanceStatusResponse, 'utf-8'))
instanceStatus = describeInstanceStatusResponse['InstanceStatuses']['InstanceStatus'][0]['Status']
# 封装返回结果
result = {
'Cpu': instanceInfo['Cpu'], # CPU数
'Memory': instanceInfo['Memory'], # 内存大小
'OSName': instanceInfo['OSName'], # 操作系统名称
'InstanceType': instanceInfo['InstanceType'], # 实例规格
'IpAddress': instanceInfo['PublicIpAddress']['IpAddress'][0], # 实例公网IP地址
'InternetMaxBandwidthOut': instanceInfo['InternetMaxBandwidthOut'], # 公网出带宽最大值
'instanceStatus': instanceStatus # 实例状态
}
return jsonify(result)
# 运行Flask应用
if __name__ == "__main__":
app.run()
粘贴后,按Esc键,输入:x保存并退出编辑。
重点:需要修改get_server_info.py的metaUrl的角色名称
get_server_info.py里面的metaUrl需要修改
1.首先创建一个RAM角色
(1)登录阿里云管理控制台
(2)在搜索框里面索索RAM,点击“访问控制”
(3)点击角色
(4)点击创建角色
(5)下面这三种角色选择“阿里云服务”,这个角色是让某个特定的阿里云服务来使用这个角色进行API调用。这个对我们的ECS实例来说是最常见选择
(6)然后创建一个普通服务角色。受信服务选择云服务器。
(7)创建完成后为角色授权
(8)点击新增授权
2.其次把ECS实例与角色关联起来【重点!!!不关联后面会报错】
在控制台里面点击实例,点击三个点(更多)
点击授予/收回RAM角色
把刚才创建的角色授权过来
如果这里授权成功,后面的步骤里面运行
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/pighero
↓会显示如下图。
如果不给授权的话,运行会报错提示Internal Server Error
需要修改get_server_info.py的region
这个region可以在我们那个控制台的地址栏看一下url的参数哈哈哈哈
region = 'cn-beijing’←我是深圳的所以我改为cn-shenzhen了
4.安装uWSGI Server
写完服务端代码后,您需要安装并使用uWSGI来启动Flask服务。
1.执行命令安装uWSGI。
pip3 install uwsgi
2.新建uwsgi配置文件。
cd /data &&vim uwsgi.ini
3.进入Vim编辑器后,按i键进入编辑模式。
[uwsgi]
#uwsgi启动时所使用的地址和端口
socket=127.0.0.1:5000
#指向网站目录
chdir=/data
#python启动程序文件
wsgi-file=get_server_info.py
#python程序内用以启动的application变量名
callable=app
#处理器数
processes=1
#线程数
threads=2
#状态检测地址
stats=127.0.0.1:9191
#保存启动之后主进程的pid
pidfile=uwsgi.pid
#设置uwsgi后台运行,uwsgi.log保存日志信息 自动生成
daemonize=uwsgi.log
4.粘贴后,按Esc键,输入:x保存并退出编辑。
5.运行uwsgi server。
uwsgi uwsgi.ini
6.执行以下命令查看uwsgi服务启动情况,看到如下图效果是服务启动成。
ps aux | grep uwsgi
5.配置Nginx并重启
启动好后端服务后,我们需要添加Nginx配置来代理后端服务。
1.创建配置文件。
vim /etc/nginx/conf.d/app.conf
2.进入Vim编辑器后,按i键进入编辑模式。
server {
listen 80 default_server;
server_name app.example.com;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
location / {
# 转发端口
uwsgi_pass 127.0.0.1:5000;
include uwsgi_params;
}
}
3.粘贴后,按Esc键,输入:x保存并退出编辑。
4.重启Nginx。
nginx -s reload
5.验证配置是否成功。
说明:如果未运行成功,可以在/data/uwsgi.log日志文件查看原因。
curl http://127.0.0.1/ecs/getServerInfo
命令执行结果是Invalid Parameter表示服务配置成功。
过程中存在的报错等
(一)执行curl http://127.0.0.1/ecs/getServerInfo提示Internal Server Error
排查
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/pighero
先试一下这个,如果报错说明你没有给实例关联角色。可以参看前面部分给实例分配角色
如果成功应该提示如下信息
查了半天感觉没有问题,最后我采用了大招!重启了我的ECS服务器哈哈哈哈哈
很好,现在变成502 bad gateway了…
如何查看flask应用是否正在运行
使用ps命令
ps命令可以显示当前系统中的活动进程。您可以结合grep命令来搜索包含您的应用名称的进程。例如,如果您的Flask应用文件名为app.py,您可以这样做:
ps aux | grep app.py
输出后发现没启动flask应用
因为我用用的是uwsgi来使用flask所以用如下命令来重启
uwsgi --ini /data/uwsgi.ini
检查uWSGI服务状态:
您可以使用下面的命令来确认uWSGI服务是否成功启动:
bash
Copy code
ps aux | grep uwsgi
如果看到uWSGI进程正在运行,那么uWSGI服务应该是正常启动了。
确认Nginx服务状态:
如果uWSGI服务运行正常,下一步是确认Nginx服务是否也在正常运行。可以使用以下命令来检查Nginx服务状态:
bash
Copy code
systemctl status nginx
如果Nginx没有运行,使用以下命令启动它:
bash
Copy code
systemctl start nginx
一旦Nginx服务启动,您应该能够通过Nginx访问您的Flask应用。
http://112.74.35.88/ecs/getServerInfo
给我整无语了
我决定先往后弄
登录微信小程序
https://mp.weixin.qq.com/
点击设置
在基本设置里面找到自己的AppID
7.安装小程序开发环境并创建项目
启动好后端服务后,我们接下来要开发开发小程序。先安装小程序开发环境。
安装Node.js开发环境,请到Node.js页面下载并安装Node.js环境。
下载并安装微信小程序开发工具。详细信息请参见开发工具下载。
打开小程序开发工具,然后使用微信扫码登录。
单击加号创建微信小程序示例项目。
5.参考以下填写项目信息,最后单击新建。
项目名称:例如ECSAssistant。
目录:例如D:\workspace\wechat\ECSAssistant。
AppID:小程序的唯一标识,从小程序控制台获取。
开发模式:小程序。
后端服务:不使用云服务。
6.配置项目允许访问非HTTPS域名。在顶部配置栏,选择设置>项目设置,在本地设置页签,选中不校验合法域名、web-view(业务域名)、TLS版本一级HTTPS证书。
阿里云ECS怎么查看mysql数据库?
背景,用navicat连上阿里云后,创建了数据库。现在想在服务器上看这些数据库
首先,登录ECS服务器,然后mysql -u [username] -p
输入密码以后就进来了
我这里的用户名username是zdx