Alibaba Cloud is the leading cloud service provider in China. Since China doesn't have mature GitHub-integrated hosting services like Vercel, Alibaba Cloud becomes the go-to option for developers who want to deploy their websites within mainland China.
Alibaba Cloud offers a wide range of server options. We generally recommend using Elastic Compute Service (ECS) for TinaCMS project deployment. For detailed instructions on creating and configuring your server, please refer to the Official Alibaba Cloud Documentation.
After creating your ECS instance, you'll need to set up the necessary software for manage your TinaCMS project.
PM2 is a process manager for Node.js applications that helps keep your application running in production.
pnpm install -g pm2
Nginx will serve as a reverse proxy for your TinaCMS application.
yum install nginx
Next, start Nginx and enable it to run on system boot:
systemctl start nginx # Start the Nginx servicesystemctl enable nginx # Configure Nginx to start automatically on system bootsystemctl status nginx # Check the status of the Nginx service
Create a configuration file for your TinaCMS site:
vim /etc/nginx/conf.d/tinademo.conf
Add the following configuration:
server {listen 80;server_name your - domain.com; # Replace with your actual domainlocation / {proxy_pass http://localhost:3000;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;}}
Test your Nginx configuration for syntax errors:
nginx -t
Reload Nginx to apply the new configuration:
nginx -s reload
First, create a directory on your server where your Tina CMS project will be deployed:
mkdir -p /www/tinademocd /www/tinademo
Generate an SSH key pair on your Alibaba Cloud server:
ssh -keygen -t ed25519 -C "deploy-key"# Press Enter to use the default path# Leave the passphrase empty by pressing Enter
Add the generated public key to the authorized_keys file to allow GitHub Actions to authenticate:
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
After generating your SSH key, you'll need to add several secrets to your GitHub repository to enable secure deployment.
You'll need to configure the following secrets:
SSH_PRIVATE_KEY
: The private key generated on your servercat ~/.ssh/id_ed25519
-----BEGIN OPENSSH PRIVATE KEY----
and -----END OPENSSH PRIVATE KEY-----
SERVER_HOST
: Your Alibaba Cloud server's IP addressSERVER_USERNAME
: The username for connecting to your serverroot
or the user account you created on your ECS instanceNEXT_PUBLIC_TINA_BRANCH
: The branch that Tina CMS should use for contentmain
or master
)NEXT_PUBLIC_TINA_CLIENT_ID
: Your Tina Cloud client IDTINA_TOKEN
: Your Tina Cloud token for authenticationCreate a new file in your repository at .github/workflows/deploy.yml
with the following content:
name: Deploy to Alibaba Cloud Serveron:push:branches: [main]jobs:deploy:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Setup Node.jsuses: actions/setup-node@v3with:node-version: "22.14.0"- name: Setup pnpmuses: pnpm/action-setup@v2with:version: 8- name: Install Dependenciesrun: pnpm install- name: Create .env filerun: |cat > .env << EOLNEXT_PUBLIC_TINA_CLIENT_ID=${{ secrets.NEXT_PUBLIC_TINA_CLIENT_ID }}TINA_TOKEN=${{ secrets.TINA_TOKEN }}NEXT_PUBLIC_TINA_BRANCH=${{ secrets.NEXT_PUBLIC_TINA_BRANCH }}EOL- name: Buildenv:NEXT_PUBLIC_TINA_CLIENT_ID: ${{ secrets.NEXT_PUBLIC_TINA_CLIENT_ID }}TINA_TOKEN: ${{ secrets.TINA_TOKEN }}NEXT_PUBLIC_TINA_BRANCH: ${{ secrets.NEXT_PUBLIC_TINA_BRANCH }}run: pnpm build- name: Deploy to Serveruses: appleboy/scp-action@masterwith:host: ${{ secrets.SERVER_HOST }}username: ${{ secrets.SERVER_USERNAME }}key: ${{ secrets.SSH_PRIVATE_KEY }}source: ".next/,public/,package.json,pnpm-lock.yaml,.env,tina/,next.config.js,.tina/"target: "/tina/tinademo/"rm: true- name: Execute Remote SSH Commandsuses: appleboy/ssh-action@masterwith:host: ${{ secrets.SERVER_HOST }}username: ${{ secrets.SERVER_USERNAME }}key: ${{ secrets.SSH_PRIVATE_KEY }}script: |cd /tina/tinademopnpm installpm2 delete tinademo || truepm2 flush tinademoNODE_ENV=production pm2 start "pnpm start" --name tinademo
To use a custom domain with your TinaCMS project in China:
server {listen 80;server_name yourdomain.cn;# Rest of configuration}
Remember that websites hosted in mainland China require ICP filing. Start this process through your domain provider or Alibaba Cloud.
© TinaCMS 2019–2025