6.2 KiB
create an elb with --single and --database
redeploy with username option set, does it change?
Does strapi work with a databse set in production mode?
SSH into EC2 - check if its using sqlite
deocument that the db has to be done from cli arg, but the configs can be done via files.
SSL? https://levelup.gitconnected.com/beginners-guide-to-aws-beanstalk-using-node-js-d061bb4b8755
Add postgres to strapi Add the S3 bucket to strapi
If doesnt work, try installing yarn in the ELB instance
Create seperate sql database + VPC rules: http://blog.blackninjadojo.com/aws/elastic-beanstalk/2019/01/28/adding-a-database-to-your-rails-application-on-elastic-beanstalk-using-rds.html
Tie this in with a cloudformation template + hooking it up
/opt/elasticbeanstalk/node-install/node-v12.16.1-linux-x64/bin
Try setting the database name using cloudformation template
Running strapi in different modes
You should use development for developing strapi and then deploy it to production.
If you run strapi in production, you cannot edit content types. See this git issue for the thread.
If you're running Strapi in a multiple instance you should:
- Run strapi locally in develop mode.
- Create content types.
- Build strapi in production.
- Push to ELB.
If you're running a single instance, you can alternatively just run it in develop mode in ELB.
Strapi stores its models locally on the instance and not on the database.
https://github.com/strapi/strapi/issues/4798
This is not a bug and is intended, as the CTB (Content-Type builder) saves model configurations to files doing so in production would require Strapi to restart and thus could potentially knock your production API offline. Along with the previous reason, strapi is also very much pushed as a scale able application which would mean these changes would not be replicated across any clustered configurations.
There is no current plans to allow for this, as well as no plans to move these model definitions into the database. The enforcement of using the proper environment for the proper task (Production, Staging, and Development) is something that has been pushed from day 1.
Due to the reasons I explained above I am going to mark this as closed but please do feel free to discuss.
Strapi documentation
https://strapi.io/blog/api-documentation-plugin
You can install the strapi documentation plugin by running: npm run strapi install documentation.
You can then access it through the Strapi Admin panel.
You should change the production URL server url in the documentation settings.
Edit the file ./extensions/documentation/documentation/1.0.0/full_documentation.json and change YOUR_PRODUCTION_SERVER to the ELB URL of your environment.
API Examples using HTTPIE
Authenticate with the API
http http://strapi-prod.eu-west-1.elasticbeanstalk.com/auth/local identifier=apiuser password=password
Get a Single Content Type
http http://strapi-prod.eu-west-1.elasticbeanstalk.com/tests Authorization:"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwiaWF0IjoxNTg3ODY3NzQ4LCJleHAiOjE1OTA0NTk3NDh9.McAi1b-F3IT2Mw90652AprEMtknJrW66Aw5FGMBOTj0"
Use query parameters to filter for Multiple Content Type
You can use query parameters to filter requests made to the API.
https://strapi.io/documentation/3.0.0-beta.x/content-api/parameters.html#parameters
The syntax is ?field_operator=value, e.g ?title_contains=test, after the endpoint URL for the content type.
http "http://strapi-prod.eu-west-1.elasticbeanstalk.com/tests?title_contains=test" Authorization:"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiaXNBZG1pbiI6dHJ1ZSwiaWF0IjoxNTg3ODY3NzMwLCJleHAiOjE1OTA0NTk3MzB9.XXdoZUk_GuOION2KlpeWZ7qwXAoEq9vTlIeD2XTnJxY"
S3 Upload Addon
You should add the strapi-provider-upload-aws-s3 extension using NPM. Make sure you add the same version of Strapi you are using.
npm i strapi-provider-upload-aws-s3@3.0.0-beta.20
AWS Resources
You should have an S3 bucket with public access, and an AWS account that has a policy to access the bucket.
Configuration
You should create a settings file at ./extensions/upload/config/settings.json.
This file defines an S3 object as in: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property.
You can use Strapi dynamic config files to set environment variables:
- provider
- providerOptions
- accessKeyId
- secretAccessKey
- region
- params
- Bucket
{
"provider": "aws-s3",
"providerOptions": {
"accessKeyId": "${ process.env.STRAPI_S3_ACCESS_KEY || 'AKIA23D4RF6OZWGDKV7W' }",
"secretAccessKey": "${ process.env.STRAPI_S3_SECRET_KEY || '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' }",
"region": "${ process.env.STRAPI_S3_REGION || 'eu-west-1' }",
"params": {
"Bucket": "${ process.env.STRAPI_S3_BUCKET || 'elb-example-bucket' }"
}
}
}
Alternatively if you want to use different options for different environments, you can use a settings.js file instead.
https://strapi.io/documentation/3.0.0-beta.x/plugins/upload.html#using-a-provider
if (process.env.NODE_ENV === "production") {
module.exports = {
provider: "aws-s3",
providerOptions: {
accessKeyId: process.env.STRAPI_S3_ACCESS_KEY,
secretAccessKey: process.env.STRAPI_S3_SECRET_KEY,
region: process.env.STRAPI_S3_REGION,
params: {
Bucket: process.env.STRAPI_S3_BUCKET,
},
},
};
} else {
module.exports = {};
}
Fix Version Numbers
When using Strapi you should make sure the version numbers for all dependencies in ./package.json are fixed for Strapi modules. You cannot mix and match and upgrade arbitrarily.
An example is:
{
"dependencies": {
"knex": "<0.20.0",
"pg": "^8.0.3",
"sqlite3": "latest",
"strapi": "3.0.0-beta.20",
"strapi-admin": "3.0.0-beta.20",
"strapi-connector-bookshelf": "3.0.0-beta.20",
"strapi-plugin-content-manager": "3.0.0-beta.20",
"strapi-plugin-content-type-builder": "3.0.0-beta.20",
"strapi-plugin-documentation": "3.0.0-beta.20",
"strapi-plugin-email": "3.0.0-beta.20",
"strapi-plugin-upload": "3.0.0-beta.20",
"strapi-plugin-users-permissions": "3.0.0-beta.20",
"strapi-provider-upload-aws-s3": "3.0.0-beta.20",
"strapi-utils": "3.0.0-beta.20"
}
}